#ifndef GAUSSIAN_H
#define GAUSSIAN_H

typedef struct UnivarGaussian_t
{
  double mean;
  int fixed_mean;
  double var;
  double sd;
  int fixed_var;
} UnivarGaussian_t;

/* the parameters must be either a mean and variance or variance or nothing */
void UnivarGaussian_Init_Params(UnivarGaussian_t * dist, int nparams, ...);

#define UnivarGaussian_Init_Args while(0)

double UnivarGaussian_Sample(const UnivarGaussian_t * dist, int nargs, ...);

double UnivarGaussian_LogProb(const UnivarGaussian_t * dist, double val,
                              int nargs, ...);
double UnivarGaussian_Prob(const UnivarGaussian_t * dist, double val,
                           int nargs, ...);

#endif
